iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0
Software Development

iOS App 實作開發新手村系列 第 14

Day14 在Swift的世界中朗誦HelloWorld(2)

  • 分享至 

  • xImage
  •  

20190930

前言

在昨天的文章中,我們建立了一個專案,並嘗試加入一些UI控制項元件,今天我們要實際寫一些簡單的程式碼,讓App啟動時,可以自動朗讀『Hello, World.』

現在,我們馬上開始!

練習過程

將UI與程式碼做連結

首先將畫面的目標選到ViewController上(上方左邊的第一個),切者到Identity Inspeector上,確認對應的class已選好

專案建立好的時候,預設已經做好連結,也可以與自訂的class來做綁定

接者我們示範如何連結自訂的class (此步驟可略過)

  1. 在上面的工具列中,選擇File => New => File,
    或是可以用快速鍵(cmd + N)

  2. 接者選擇Cocoa Touch Class,這個選項可以從內建的類別做繼承,可以讓class已經擁有一些功能。如果要自訂不做繼承,或是一般我們在建立Model的話,則可以選擇Swift File。其餘的部分可依照讀者的需求自行選擇。

  3. 這邊我們選擇UIViewController作為super class

  4. 並輸入類別的名稱HelloViewController,輸入的過程ViewController其實已自動填入,只要打上Hello即可

  5. 選擇建立的路徑,並建立檔案

  6. 將原本storyboard的class替換為『HelloViewController』

開始寫程式

接下來我們今天來寫一些簡單的程式碼,讓App一啟動的時候,可以自動朗讀『HelloWorld』

  1. 首先在最上面import UIKit,加入import AVFoundation,之後的代碼即可使用。而iOS App中,如果要引用其他的framework,也是在程式碼的最上方做import
import UIKit
import AVFoundation
  1. 接者在Life Cycle中的viewDidLoad加入以下程式碼
override func viewDidLoad() {
    super.viewDidLoad()
    let content = "Hello, World."
    let speechUtterance = AVSpeechUtterance(string: content)
    // language: BCP-47, ref: https://gist.github.com/vitoziv/9108407
    speechUtterance.voice = AVSpeechSynthesisVoice(language: "en-US")
    // 說話的音量 0.0 - 1.0 (小聲到大聲)
    speechUtterance.volume = 1.0
    // 說話的速度
    speechUtterance.rate = 0.5
    // 音調的高低 0.5 - 2.0 (低到高)
    speechUtterance.pitchMultiplier = 1
    // 本句話說之前的延遲時間
    //speechUtterance.preUtteranceDelay = 0
    // 本句話說完到說下一句話之前的延遲時間
    //speechUtterance.postUtteranceDelay = 0
    
    let synthesizer = AVSpeechSynthesizer()
    synthesizer.speak(speechUtterance)
}
  • 這邊我們要念的文字為content

  • 並使用AVSpeechUtterance這個類,來幫助我們準備後面要朗讀的內容與設定

  • 最後使用AVSpeechSynthesizer這個類,來做朗讀(speak方法)

  • 小技巧提示,在選取要複製的代碼區塊時,可以先按下Option (alt)鍵,在選取程式碼,這樣就可以略過一些不想複製的縮排,在寫作時非常方便

  1. 此時我們將App Run起來,第一次啟動App時,會朗讀『Hello, World.』

重構小技巧

  1. 接者我們想把程式碼重構調整一下,看起來比較整齊。首先選取剛剛朗讀所使用的程式碼,按下滑鼠右鍵後,依序選擇『Refactor => Extract to Method』
  • 這個步驟可以將一段(一個區塊)的程式碼做抽離,抽離成一個方法,這對抽離方法(擷取方法)的這一項重構手法來說,非常的方便使用

  • 對重構有興趣的讀者可以參考ref4 的重構,第一版為Java版(藍皮),後來又出了一版JavaScript的版本(紅皮)

  1. 此時,剛剛的程式碼已經被抽離為一個方法,我們將其從新命名為『sayHello』

  2. 並將fileprivate的file去掉,並移動到最下方,一般我們習慣將自訂的私有方法放到最下面,並加入Other Method的MARK,如圖

  3. 之後我們在尋找方法,就可以在上方的區塊,更容易的搜尋

到這邊,恭喜各位讀者已完成今日的進度。 (為自己鼓掌)

總結

在今天的文章裡,我們介紹了如何將UIController與程式碼做連結,並加入一些簡單的程式碼,讓我們App 啟動時,可以有朗讀功能,也練習了簡單的重構方法的操作。
今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 彼得潘的 Swift iOS App 開發問題解答集
    https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86

  2. iOS 13 & Swift 5 - The Complete iOS App Development Bootcamp - Angela Yu
    https://www.udemy.com/course/ios-13-app-development-bootcamp/

  3. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  4. 心智圖軟體Xmind
    https://www.xmind.net/

  5. 重構|改善既有程式的設計, 2/e (繁體中文版)
    https://www.tenlong.com.tw/products/9789865021832?list_name=c-refactoring


上一篇
Day13 在Swift的世界中朗誦HelloWorld (1)
下一篇
Day15 XIB起手式
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言